# -*- coding: utf_8 -*-
# @Create   : 2021/8/30 10:18
# @Author   : yh
# @Remark   : 巡检计划model层
from typing import List

from pydantic import constr, validator

from model.public.base import MxBaseModel, MxUpdateBaseModel
from utils.parser.fields import check_time_str


class TestItemsSubModel(MxBaseModel):
    """
    检查项目模型
    """
    test_code: str                                   # 检测项目code
    confidence: float                                # 置信度（根据检测值和置信度对比来判断是否通过检测）
    desc: constr(min_length=1, max_length=200) = ''  # 备注


class InspectionPlanModel(MxBaseModel):
    """
    巡检计划模型
    """
    name: constr(min_length=1, max_length=50)            # 巡检计划名称
    principal: constr(min_length=1, max_length=50) = ''  # 负责人
    task_cycle_code: str                                 # 计划周期code（设置计划执行频率）
    begin_time: str                                      # 开始时间
    videos: str                                          # 所包含的视频code（多个视频使用逗号分割）
    TestItems: List[TestItemsSubModel]                   # 所包含检测项目
    data_state: int = 1                                  # 数据状态（是否启用 0：停用、1启用）
    state: int = 1                                       # 状态 0：删除、1：启用
    desc: constr(min_length=1, max_length=200) = ''      # 备注

    # 校验时间字符串是否符合时间格式
    _begin_time = validator('begin_time', allow_reuse=True)(check_time_str)


class InspectionPlanUpdateModel(MxUpdateBaseModel):
    """
    巡检计划更新模型
    """
    name: constr(min_length=1, max_length=50)            # 巡检计划名称
    principal: constr(min_length=1, max_length=50) = ''  # 负责人
    videos: str                                          # 所包含的视频code（多个视频使用逗号分割）
    TestItems: List[TestItemsSubModel]                   # 所包含检测项目
    task_cycle_code: str                                 # 计划周期code（设置计划执行频率）
    begin_time: str                                      # 开始时间
    data_state: int = 1                                  # 数据状态（是否启用 0：停用、1启用）
    state: int = 1                                       # 状态 0：删除、1：启用
    desc: constr(min_length=1, max_length=200) = ''      # 备注

    # 校验时间字符串是否符合时间格式
    _begin_time = validator('begin_time', allow_reuse=True)(check_time_str)
